package com.szl.yeb.common;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 统一返回对象R
 *
 * @author szl
 * @since 2022-08-24 16:21:29
 */
@Data
public class R<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer code; //编码：1成功，0和其它数字为失败

    private String msg; //信息

    private T data; //数据

    private Map<String, Object> map = new HashMap<>(); //动态数据

    /**
     * 返回处理成功信息和数据
     *
     * @param msg
     * @param object
     * @param <T>
     * @return
     */
    public static <T> R<T> success(String msg, T object) {
        R<T> r = new R<>();
        r.code = 1;
        r.msg = msg;
        r.data = object;
        return r;
    }

    /**
     * 返回处理失败状态
     */
    public static <T> R<T> error() {
        R<T> r = new R<>();
        r.code = 0;
        return r;
    }

    /**
     * 返回处理成功信息
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> R<T> okMsg(String msg) {
        return success(msg, null);
    }

    /**
     * 返回处理失败信息
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> R<T> errMsg(String msg) {
        R<T> r = new R<>();
        r.msg = msg;
        r.code = 0;
        return r;
    }

    /**
     * 返回处理成功数据
     *
     * @param object
     * @param <T>
     * @return
     */
    public static <T> R<T> obj(T object) {
        return success(null, object);
    }

    /**
     * 添加map数据
     *
     * @param key
     * @param value
     * @return
     */
    public R<T> addMap(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}
